package com.lagou.edu.spring.core;

import lombok.Data;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;

/**
 * bean的注册信息
 *
 * @author 大犬
 * @date 2020/3/31
 */
@Data
public class BeanDefinition {
    /**
     * bean名称
     */
    private String beanName;

    /**
     * bean类型
     */
    private Class beanType;
    /**
     * 提供的bean的实例对象，如果该属性不为空，则容器在创建这个对象直接那该属性作为实例化的对象
     */
    private Object provideBean;

    /**
     * 父bean名称，beanCreateMethod的所在bean对象
     */
    private String parentBeanName;

    /**
     * bean的创建方法，如果该方法为null，则默认使用beanType进行无参构造
     */
    private Method beanCreateMethod;

    /**
     * 是否需要跳过增强
     */
    private Boolean skipWrapper;

    /**
     * 构建方法依赖的bean名称集合
     */
    private List<String> createMethodDependenceBeanNames;

    /**
     * 属性依赖bean集合
     */
    private Map<String, Field> propertyDependencies;

    /**
     * 初始化方法
     */
    private List<Method> initMethods;

}
